{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(5)\n",
    "points = np.vstack((np.random.normal([-10, 0], 1, (30, 2)), np.random.normal([10, 0], 1, (30, 2))))\n",
    "\n",
    "_, ax = plt.subplots(figsize=(8, 4))\n",
    "ax.scatter(points[:, 0], points[:, 1], s=10)\n",
    "ax.set_ylim([-5, 5])\n",
    "ax.set_xticks([]), ax.set_yticks([]), ax.axis('off')\n",
    "ax.text(-10, -3.5, \"A\", fontsize=14)\n",
    "ax.text(10, -3.5, \"B\", fontsize=14)\n",
    "\n",
    "x = points[6]\n",
    "ax.text(x[0] - 0.9, x[1] - 0.14, \"$\\\\mathbf{x}$\", fontsize=14)\n",
    "ax.scatter(x[0], x[1], s=30, c=\"r\")\n",
    "\n",
    "y = points[41]\n",
    "ax.scatter(y[0], y[1], s=30, c=\"r\")\n",
    "ax.text(y[0] + 0.4, y[1] - 0.14, \"$\\\\mathbf{y}$\", fontsize=14)\n",
    "\n",
    "z = points[38]\n",
    "ax.scatter(z[0], z[1], s=30, c=\"r\")\n",
    "ax.text(z[0] + 0.4, z[1] - 0.14, \"$\\\\mathbf{z}$\", fontsize=14)\n",
    "\n",
    "plt.plot([x[0], y[0]], [x[1], y[1]], \"r\", linestyle=\"dashed\")\n",
    "plt.plot([x[0], z[0]], [x[1], z[1]], \"r\", linestyle=\"dashed\")\n",
    "\n",
    "plt.savefig(\"two_clusters.png\", dpi=80, rasterize=True, transparent=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pyximport; pyximport.install()\n",
    "from tests import quad_tree_debug\n",
    "from openTSNE.quad_tree import QuadTree\n",
    "\n",
    "tree = QuadTree(points)\n",
    "quad_tree_debug.plot_tree(tree, points)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_boxes = 5\n",
    "n_points = 3\n",
    "\n",
    "xs = np.linspace(-13, 13, n_boxes * n_points)\n",
    "ys = np.linspace(-13, 13, n_boxes * n_points)\n",
    "xv, yv = np.meshgrid(xs, ys)\n",
    "\n",
    "diff = (xs[1] - xs[0]) / 2\n",
    "\n",
    "_, ax = plt.subplots(figsize=(8, 8))\n",
    "ax.scatter(xv.ravel(), yv.ravel(), c=\"r\", s=1)\n",
    "\n",
    "xs1 = np.linspace(-13 - diff, 13 + diff, n_boxes + 1)\n",
    "ys1 = np.linspace(-13 - diff, 13 + diff, n_boxes + 1)\n",
    "\n",
    "ax.set_ylim(-13.1 - diff, 13.1 + diff)\n",
    "ax.set_xlim(-13.1 - diff, 13.1 + diff)\n",
    "\n",
    "for y in ys1:\n",
    "    ax.plot([-13.1 - diff, 13.1 + diff], [y, y], \"k\", linestyle=\"dashed\", linewidth=1)\n",
    "\n",
    "for x in xs1:\n",
    "    ax.plot([x, x], [-13.1 - diff, 13.1 + diff], \"k\", linestyle=\"dashed\", linewidth=1)\n",
    "    \n",
    "ax.scatter(points[:, 0], points[:, 1], s=20)\n",
    "\n",
    "ax.set_xticks([]), ax.set_yticks([]), ax.axis('off')\n",
    "\n",
    "plt.savefig(\"interpolation_grid.png\", dpi=80, rasterize=True, transparent=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "225"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(xv.ravel())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x144 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.interpolate import lagrange\n",
    "\n",
    "def cauchy(x):\n",
    "    return np.array(1 + x ** 2, dtype=float) ** -1\n",
    "\n",
    "x_ = np.linspace(-1.5, 1.5, 100)\n",
    "\n",
    "_, ax = plt.subplots(nrows=1, ncols=3, figsize=(8, 2))\n",
    "\n",
    "ax[0].set_title(\"True function\")\n",
    "ax[0].plot(x_, cauchy(x_))\n",
    "\n",
    "x = np.linspace(-1, 1, 3)\n",
    "y = cauchy(x)\n",
    "poly = lagrange(x, y)\n",
    "ax[1].set_title(\"3 interpolation points\")\n",
    "ax[1].scatter(x, y, c=\"r\", s=30)\n",
    "ax[1].plot(x_, poly(x_))\n",
    "\n",
    "x = np.linspace(-1, 1, 5)\n",
    "y = cauchy(x)\n",
    "poly = lagrange(x, y)\n",
    "ax[2].set_title(\"5 interpolation points\")\n",
    "ax[2].scatter(x, y, c=\"r\", s=30)\n",
    "ax[2].plot(x_, poly(x_))\n",
    "\n",
    "for i in range(3):\n",
    "    ax[i].set_xticks([]), ax[i].set_yticks([]), ax[i].axis('off')\n",
    "\n",
    "plt.savefig(\"runge.png\", dpi=80, rasterize=True, transparent=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAKhCAYAAABD+SaLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xd8VfX9x/H3uSs3e7OHDDFhGwVBqdu6raOt1tGfrQXBgYoLVEREHICAzBDEPequWrGVqkUEQZFNEmRvSCB733F+f0RQi0ACNzk5yev5T/sg557zDj64eefcz/d7DNM0BQAAANiRw+oAAAAAwLGizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANty1fJ4HhcGAACAumbU9EDuzAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLcosAAAAbIsyCwAAANuizAIAAMC2KLMAAACwLZfVAQCgMVuxvUArt+crPjJMv+3aXF630+pIANCoGKZp1ub4Wh0MAHZnmqb+k7VXWbuL1To+XJf2aFnjQjp39W6N//c6BYJBGYahLs2jNe36kxXmotACwFEYNT2QO7MAcASzvtqkD1fslMthyB80tWRTnp68qrtcziNPaZmmqalfrFeExymPyy3TNLUxp0SLN+XprC7Jhxy/Zmeh3vpum/xBU1f2bq3TOibW1bcEAI0KZRYADqO00q+PV+5SUlSYnA5Dpmkqa3ehfthboq6tYo74WtOUKn1BRYdXv80aRvVNhvIq/yHHZu4q0j1vrVDQNGVIWrIpT09c2V2nd04K+fcEAI0NC8AA4DD8wepy6fjxwy7DMGQYhgLBo09cORyGftMlSQVlPvn8QZVU+OV2OtSzTdwhx360cqf8waBiw92KCXfL6TD09tLtIf5uAKBx4s4sABxGjNeltPbxWrolT1Fel8qrAkqKDlPnZlE1ev3wi1IV7nZqyaY8NYvxatgFXdQqLvyQ4w7ctf2J+St/BgD4NSwAA4AjKK8K6KVFW7RmZ6HaJoTrlgEdlRwddtjjF2/ar2c+zVZRhU/9OyVqxMWpigw78n2DrN1FGvrmcgWCphyGFDSlsVf1UP9OzM0CaLJq/Bs9ZRYAQmRTbon+8uJ3MgxDHpdDJZU+ndUlWU9d3fOor127q1DvLN0hfzCoK3q1Vt8OCfWQGAAaLHYzAID6tnJHgQJB8+Cir+gwtxZt3F+j13ZrFatuV8TWZTwAaJQoswAQIlFhbsmo3pbLMAz5AkFFHWXE4HB8gaBWbC9QeVVAKS2i1SzGG+K0ANA4UGYBIETO7JKkk5pHa92eYgVlyuVw6L7fdqn1ear8QY36aI3W7CySw5DcToeeuKq7UloceTswAGiKmJkFgBCq9Af0RVaOiip86tU27pgK6JfZOXr2s3VqFh0mwzBUWO5Ti1ivpl2f9ovjKnwBBYLmUReYAYANMTMLAFYIczl1cY+Wx3WOwvIqmfppy64Ij1P7SyoPfj0YNJU+f6PeX75TktSvY6IeuTS1xo/ZBYDGhIcmAECILVifq2c/W6dXFm1RSeWhT/w6mpNaxMhhGKrwBRQ0TeWVVumU9j/tbvCfrL16b9kOxYa7FR/h1jcb9+n5BZtD+S0AgG1wZxYAQujNb7dq+pcbFTQlmaY+XbNHL9zcR+Gemt81TW0Zo7vPO1HpX21UUYVP/TomasjZnQ5+fdWOQjkchpyOA3duXVq5oyDU3woA2AJlFgBCxDRNZXy1WV63U25n9QdfO/LLtGjjPp2X2vyIr91fUqnXl2zT3qIK9e2QoMt7ttK5qc0UNHWwtB7QKs6rYNA8uGtChS+g1nHsdgCgaaLMAkCImGb1lloe18/eWo3q3QmOpKTSrzveWKY9RZVyOw0t2rhfuwoqNOTsTnL+yhKIq05uo6837NeGnGIZMpQQ6dGQszuH+LsBAHugzAJAiDgchs5Pba55mXsU5nbK5w8qzO3UKe3jJf20/+z/+n5rvnJLqpQY6ZEkBYKm3lu2Xbee2VEOx6HHh3uceu663lq7q0i+QFCpLWOOeT9bALA73v0AIIRGXJKimPDqRVlJUWEadkEXrdxRoGc/+0GllX7165ioRy/vqmiv+39e+cudD4+2a6Lb6VDvtnGhDQ8ANsQ+swBQhzJ3FWnI69/L43LI7TRUVO7XWV2SNfaqHgePKarw6ZaXvlNeaZXcTocq/UFdeXIr3XXeoQ9c2FdSqafmZmnNziIlR4dp+MUp6t6ax+ACaHRqvM8sW3MBQB1as7NQ/oCpMJdDDsNQlNelbzfn/eKYGK9b069P0wVdmyu1ZYwGndlRd5xz4iHnMk1Toz5co9U7CxUX4VZhuU8j3l+t3OLKQ44FgKaCMQMAqEOxEW45jJ/mZav8ASVGhh1yXLMYr4ZfnHrEc5VWBbQ+p0QJER4ZhqGoMJcKyqu0PqdYydGHnhMAmgLKLADUQIUvoDlfb9bK7QVqlxChwWd3UlLUkQtkMGiqTXy42iZEaHtemQzDkMthaPjFKceUwetyyOVwyBcw5XEZMk1TwWD1nV0AaKqYmQWAozBNUw++t1pLNu1XmNuhKn9QLWK9eukvfQ/7CFlfIKiHPlit77fmyyHJ5TT0f/1P0IATk9U2IeKYs/xrzW5Nmrf+xzdjU2d1SdZDl6T+6i4JAGBjNX5T484sABxFYblP327er7gItwzDUIRH2ldcqazdRTq5XfzB43YWlGvtzkJFeV3alV+ubzflKT6y+jUFZT6t2VWkP53WvtbXL67w6a3vtmtbXplSWkTr2T/21Pa8csVHetT3hASKLIAmjTILAEdx4AlcpqpvFZimeciTub7fmq8H3l2pQNCUKSnc7ZSMn/aV9bod2rK/tNbX9gWCGvXhWm3MLVG426kV2wu0ZV+pRnA3FgAkUWYB2NTeogo9+UmWfsgpVruECD10SaraJ0bWybWivW5d3L2l5q7ZLadhKBA0ldIyWqktYw4e89TcrIPHmqapPUUVchiGguGmDEMqrwqoa+eYw13isDbvK9WW/aVqFh0mwzAU7XXp2y35KijzKf7HhywAQFNGmQVgO/5AUMPeXqFd+eWKDHNp/d4S3f33FXp94GmK8NTN29p9F56kE5tHae3OIrVJCNe1fdrK7fxpd8P8siqFuarnZw3DULjbqS4torUpt1SGpNSWMbrj3EO326oJ8zD/HwBAmQVgQ3uKKrSnsEKxEdV3JmPCHSqp9GvzvlJ1a1U3DxBwOgxdndZGV6f9+tdPbhevJZv2KzbcLV/AlMNh6L7fnqTmMV5V+YNqFh32q4+mPZqOSZE6sVmU1u0pVpjLoQp/UGeemKy4iGPbwSBzV5FySyrVLiFCHZLq5k42ANQnyiwA24nwuBQ0pUDQlNNhKGiaCgRNRdbRXdmaeOTSVD364Vot25avcLdTD1+S+osxhGPlcjr02BXd9P6yndqWV6bUltG6rGerGs/LmqapCl9QXrdDLy7cone+3y6HYcg0pTvP7ayLe7Q87owAYCW25gJgS+nzN+rv3247WGgv7NZCwy9OsXxRlD8QlNNh1CrHln2l2lNUoTbx4WoTf+zbdv2v5dvyNfIfa1RY7lNiVJiKK3xqHuOV02Goyh9UaaVfbw/uX2ejGQBwHNiaC0DjduuZHdWrTZy27C9Vq7hw/aZzkuVFVqq+k3pYfr+0ebPk8Ujt2kmGoXeWbtcLCzfLIUOmTN19fhf9tluL486RV1qlB99bJdOU4iPcyimqUEG5Ty1jvZIkj8uhkkqpuMJPmQVga7yDAbAlwzDUv1Oi+ndKtDrK0ZmmNHGi9OSTUmWlFAxKLVtqz9OT9MLOOMWEu+RyVj+M4bnP1+v0zkmKCju+t+ct+0sVDEqRYdWL0uIjPdpfWqX8Up/iI90qKPMpMcqjRHZEAGBzR7iFAAAIifvukx59VMrLk0pLpfJyadMm5d37oJxFBQfv5npcDplm9UMajldChEf+YFCB4I/PCjNNJUWFKTLMpdziKrWI9WrslT2OfCcZAGyAO7MAmqxlW/P09vc75A+YurhbC52b2iz0owq7dknTp1ffkf0frXO2y7Vlq0oTEhTpdamo3Kcor0tJUcd/t7RtQoRSWkTrq/X75DSkmHCPRlySokt7tFRVIHhwGzEAsDt+JQfQJGXuKtLTn2Zrd0GF9pdUacb8jfpyXU7oL/SPf0iO6rfagKRUSVf8+KXYylKN/mqOnGWl2l9Spcgwl8Ze2T0kRfONJVu1Pb9cJzaLVPPYcMVFuNSrTZwMw6DIAmhUuDMLoElatHGfHA5DMeHV+7UGTVNfZOfo3JTmob1Qaankqx4bWC4pW9J6SfmS4iX12rdFb/fxqKRff8V4XSG7M/xZ5l4lRLoV5nIqWdLuwgot35avtgmh2y0BABoC7swCaJLCXI6D86SS5A+aCnfXwR3Lvn0lr1cBSUNU/aYbkPTgga9XVMjZs6diw90hHXHwup3yB376/gxJHu7IAmiEKLMAmqTfdmuhqDCXdheUa09huYJBU9ec0ibk1wkM+I22dOmpMRExWiopWdWjBrMlLfB4pD/+UWZCgj5euUs3zVmi62cv1lvfbVMt9wD/hbzSKp2bkqzCMp9yiiu1p7BCzWO8Or2zDXZ+AIBa4qEJAJqsvUUV+uqHXPkDpvp1Sgz5412LK3x64N1VWrVmnZZM/KvaxbeSkbNZp0paYhgKDw/Xih079G2uX+P+na3YcI8MQ8ovq9Lgszrp4u4tVekPKNztrPFd2y+yczTh3+tkGFKFL6DTOyeqd5s4nZ/aQrHH+AhcALBAjT+qoswCQB2ZNO8Hfbhih9a9Okq565bq1CHTtOWlB3Vey2TdOGiQLhk2TKNHj1ZEv2u1aMN+JUR6FDRNrd9brAp/UA5JcREedWoWqVGXd1PzmOoHHuSVVim3uFItYr2KDf+poOaXVunGOUvkdTsU5nKqwheQLxDUGwP7KdpLkQVgKzwBDABqIxA0NS9zj7buL1PH5Cidl9JMDseh76WmaWpHfrmqAkG1S4iQ+wj7tK7PKVZh1kLtWf21ul91m6LadpIvIlJKS9PF99yj6779VmPHjtUjc/rLHwiXZCp7T5FyiiplmqZcDocqA0E5HdITn2Rq6p/S9O81u/XsvB9kSHI4DI26vJv6daweH8gtqd7+68BuBV63UxX+oPaXVFFmATRazMwCaPJM09STc7M0/t/r9M73O/TMp9l69rN1h8yt+gNBjf44UwNfWao731im219fpvzSqsOet22klPnec4ptc6I6nv0H+YPmL8rv5MmTFRERoU/TH1dcuFM7C8qVW1wpl8OQy2nI43Ko0heUx+XQhpwS7Soo17PzfpDX5VS01y3TlB76YLV2FZRLkppHew+OF0hSeVVALoehpOiwOvhbA4CGgTILoMnbkV+uBetzlRBZ/XjX+Ai3/rl6l579bJ1eXLhZOUUVkqS5q/do4YZ9io9wKzbcrS37S5X+1cbDnnfzv+bIV5yvE68ephKf1KNNrAJBU6t3Fuo/mXvVrFkzjR8/Xt8s/Fp9fKt065kdFRfuVotYrwzDUNA0JZmq8gcV43Vrf0nlj7sSOFRQ7tPW/WXakVeuG59fovnrchQb4dbDl6TKFzBVUOZT0DT16GVdj/vRuADQkPEOB6DJq/QH5DAMOX5cZFVS6dfOggq98e02uRwOvbFkm1695TRt3lcip8M4uBgr0uPSptzSXz3n4sWL9XxGuu644w4NG3mTSiv9GvXhGpVW+ZVbXKmnPs3S/tJK/fWvf9Wrr76qRx8aruzsK3VJz1b6InuvvG6nSiv98rqdcjoMPXBRilrGhUsyVFrl18788upRBKehCI9DT32arZPbx6t/pyT9fVA/7S+pUlK0RxEe3uYBNG68ywFo8tomRKhFjFe7CsoV4XFqa16ZnIah+AiPDMNQYblP7y3boU7JUQoGTQVNU4aksqqATmwWdcj5fD6fBg0apNatW2vs2LGKjo7Up6t3K7/cL6dhyON0KDrMrTeXbNe1fdpp1qxZ6tWrl+655x69/Opr6tI8Sqt3FCrC49SAzsnq1jrm4OKvvw3ooDGfZKrCXz1C0D4+XOEel4oqqktyjNetyDCXIsNcKizz6aOsXQoEg+rfMUktYr31/DcLAHWPMgugyQtzOTX+D7005Yv12pxbohivS46f3YE1jOptti7q3kIrdxToq/X75JDUuVmkbj2r0yHnmzhxolavXq1//OMfio6OliRVP5/hZw8xMKof1CBJsS3b6/I/36Y3n5+si678o/78xyul0w7NmV9apfeW71CLWK8q95dJMlVSGZDbFZDTMNTsZ7Ox+0oqdfML32r/jzO94e4Nmv1/p6pT8qHlGwDsjDILAJKSo8M05nfdJUkvL9qimf/dqCp/UEHTlNMwdH5qc7mcDj10SapuKaqULxBUy1ivXP+zm8GmTZs0evRonX/xZYo5qb9+2FusLs2j1adDvKLCXAoEg/IFgyqs8OnG09ppe16Z7vr7chV2uUSRzd7XkCG3qXef/urZ4dDH6q7YUaDiCr9axoYr3O3U+pxi7S+pUozXrceu6PaLHQteX7xVuSXVd2olqaTSp6mfr9fk606uw79FAKh/LAAD0Oh9tyVPoz9eq6fmZmn93uKjHn9Tv/YaeGYHxUe61TLWqzFXdtepJyRIkgzDUItYr9omRBxSZE3T1JAhQ2QaTgVO+4ue/Wyd7nlrhd79fruaRXs17fo0hbudivG6ddvZnXTz6R303vc7VFYVUMv4GPX/vxEqy9utIfcO/9VcLodx8OZuXIRHPVrHqUNypN4Z3F+ndfzl073yyqrk+Nk2jS6H4+BdWgBoTLgzC6BRW7ghV6M/zpTjx90Bvt6wT1P/dLI6HuHjdofD0C0DOuqWAR1rda0333xTn332mbpec5datG4ll8MhfyCoFxdu0XkpzdU2IULxkR6dekKCfn9KW0lSaZW/uqRKat7lZLU7/XJ98+GrWr58qE4++Zd3UU9pH6+WcV7tzC+Xy+mQPxjUX87ooKhf2UN2QKckfbZ2r3yBoByGIX/Q1Fldkmv1/QCAHXBnFkCj9tZ3O+R2OhQX4VZCpEeV/oA+XbMn5NfJy8vT3XffrV5pp6rjb66Sy1H99upyOuQwDBVX+H/1deemNJMvaKq00q+yKr86XTpIcfEJGjRokAKBwC+OjfC49Owfeuv609rp3JRmGnFxiv5wSptfPe/5XZvr9nM6y+kwFAia+v0pbXTz6ScoEDQ15+tN+v3MRbp+9mJ9mZ0T2r8IAKhn3JkF0KiZMn/xTERD+nH/1tB64IEHlJeXp4/n/kuTvq9UYblPMV7Xwf9tHvvrDy7o3ylJD154kt78bruCQVO3DEhTcccp+tOf/qRp06bprrvu+sXxsRFu3dT/hKPmMQxDN/Zrrxv7tf/Fn7/yzRa9tnibYrwulfsCeuKTTMVHetS7bdyxfusAYCnuzAJo1H6f1kaV/qCKyn3KL6uS2+nUxd1bhPQaX331lebMmaN7771Xp52apieu6qHESLdyiyvVPNqrsVf1OPiI2V9zbmpzzf7zqZpzcx9d2rOVrr32Wl188cV6+OGHtW3btpBm/SI7R5EepzwuhyI81ZkWbtgX0msAQH3iziyARu2sk5rJ5TT0yeo98jgdurZPW3VuFh2y81dWVmrQoEHq0KGDRo0aJUnq3CxKL9zcV/5A8JBFYjVhGIZmzJihbt266fbbb9dHH310cJuw4xXtdWt3QbnCVV1kg6apGC8/CgDYF3dmATR6Z3RO1pNX9dBjV3RTasuYkJ776aef1rp16zRz5kxFRET84mvHUmQPOOGEE/T444/rn//8p957773jjXnQrWd2lAxD+0oqta+kSslRXl3Ws1XIzg8A9c0wazc7FvpBMwCwqezsbPXq1UvXXHON3njjjRq9pnPnzurXr59ee+21ox7r9/vVt29f7d69W1lZWYqLC81c6+Z9pfp283553U6d1SVZcRGekJwXAEKoxh9HcWcWAI6BaZoaPHiwIiIiNGnSpDq5hsvl0uzZs5WTk6MRI0aE7LwdkiJ1bZ92+l3v1hRZALZHmQWAY/Diiy9q/vz5Gj9+vJo3P/RpXaFyyimn6K677lJ6eroWLlxYZ9cBALtizAAAaiknJ0cpKSnq3r27/vvf/8rhqPl9gdqMGRxQUlKibt26KSoqSsuXL5fHw91UAI0eYwYAUFeGDRumkpISzZo1q1ZFVqoeT6itqKgozZgxQ5mZmRo3blytXw8AjRllFgBqYd68eXr99dc1YsQIpaamHtM5jmWbrUsvvVR//OMf9cQTT+iHH344pusCQGPEmAEA1FBZWZl69Oghl8ullStXyuv11vocnTp10umnn65XX3211q/ds2ePUlJSlJaWps8//zxke88CQAPEmAEAhNqYMWO0adMmzZo165iK7PFq0aKFxo0bpy+//FIvv/xyvV8fABoiyiwA1MCqVas0fvx4/eUvf9HZZ59tSYZg0NQtt9yiM844Q/fee69ycnIsyQEADQllFgCOIhAIaNCgQYqPj9f48eOPeGyVP6j80ioFg6Gbyiqu8GnUR2t1xfSFuuH5bzX44adVXFysYcOGhewaAGBXlFkAOIr09HQtWbJEkyZNUmJi4mGP++qHXF076xv9+YVvNfCVpdqRXxaS6z/3n/VauiVPSVEeGYahtzdKt945TK+//ro+++yzkFwDAOyKMgsAR7Bz506NGDFCF1xwgW644YbDHrcjv0wTPlunMLdDiVEe7Sup1OiPM49pK67/tWxbvpKiwuQwDIV7nAqapi64/lZ16dJFgwcPVllZaEozANgRZRYAjmDo0KHy+XyaOXPmEXcP2JZXXSi9bqckKT7So10F5Sr3BY47Q1yE++B5TNOUTCkpNlqzZs3S5s2b9fjjjx/3NQDAriizAHAYH330kd5//309+uij6tSp0xGPTYoKUzBoKvDjrGxZlV+RHpfCfyy3x+Ou87rI5w9qX3GlcksqdXL7ePXtkKCzzz5bf/3rXzVhwgStXLnyuK8DAHbEPrMA8CuKi4vVtWtXxcXFadmyZXK73Ud9zZyvN+mDZTvldBhyGIZGXt5Vae3if3HMse4zu7OgXD/sLVZUmEsnt42Ty1l9LyIvL08pKSnq0KGDFi1aJKfz+MszADQANd5n1lWXKQDArkaOHKmdO3fq7bffrlGRlaRbBnTUuSnNlV9WpXYJEUqKCgtZntZx4WodF37InyckJGjy5Mm64YYbNGPGDN15550huyYA2AFjBgDwP5YuXaqpU6dq8ODB6t+/f61e2yEpUmnt4g9bZEOxIOx//elPf9KFF16ohx56SNu3bw/5+QGgIaPMAsDP+P1+DRw4UM2bN9dTTz1VJ9cI9WNoDcPQzJkzFQgEuDMLoMmhzALAzzz33HNasWKFpkyZotjYWKvj1FiHDh00evRoffjhh/rggw+sjgMA9YYFYADwoy1btqhbt24699xz9dFHH4X8DqokdezYUQMGDNArr7wS8nP7fD716dNHubm5yszMtFUZB4D/UeM3YO7MAoCqZ1lvv/12GYah6dOn10mR/TUllX4t35av7D1Fx/0IXLfbrdmzZ2v37t16+OGHQ5QQABo2djMAAEnvvPOO5s6dq4kTJ6pdu3b1cs3teWW6+60VKq7wKWiaOq1DokZf0e3gtlvHok+fPrrzzjs1depU3XDDDbVewAYAdsOYAYAmr6CgQKmpqWrVqpWWLFkil6vufs//+ZjBXW8uV+buIsWGu2WapvLKfBpxcYp+263FcV3jWPbIBYAGhjEDAKip4cP8rx3cAAAgAElEQVSHKycnR7Nnz67TIvu/tueXHXxCmGEYMk1TuwrLj/u80dHRmj59utasWaMJEyYc9/kAoCGjzAJo0hYuXKhZs2bprrvuUlpaWr1eu1urWJVU+WWa1Y/BdRiGujSLDsm5r7jiCl1zzTUaPXq0NmzYEJJzAkBDRJkF0GRVVVVp0KBBateunR5//PF6v/69v+2iLs2iVFjuV1GFT9f1bav+nRJDdv4pU6YoLCxMgwcPrpOHNQBAQ8ACMABN1vjx45WZmal//vOfioqKqvfrx0V4NOOGU5RXVqUwl0PR3tDOtrZq1UpPP/20brvtNr366qv685//HNLzA0BDwAIwAE3S+vXr1aNHD11xxRV6++236+26dbnP7K8JBoMaMGCAfvjhB2VnZyspKalergsAx4kFYABwOKZpavDgwfJ6vXruuefq/dr1yeFwKCMjQ4WFhbr33nvr9doAUB8oswCanFdffVVffPGFnn76abVs2bLer19fD2Q4oHv37nrwwQf1yiuv6PPPP6/XawNAXWPMAECTsm/fPqWkpOikk07SggUL5HDU7+/0HTp00JlnnqmXX365Xq9bXl6unj17yjRNrV69WuHh4fV6fQCoJcYMAODX3HfffSosLNSsWbPqvchaKTw8XLNmzdLGjRv1xBNPWB0HAEKm6byTA2jyvvjiC7388st64IEH1L17d6vj1Ltzzz1X//d//6dx48Zp9erVVscBgJBgzABAk1BRUXHwY/ZVq1ZZ9jG7VWMGB+zbt0+pqanq3LmzFi5c2KTuTgOwFcYMAODnxo4dq/Xr1ys9Pb1Jz4smJSVp4sSJWrx4sdLT062OAwDHjTILoNHLzMzUM888o5tuuknnnXee1XEsd+ONN+r888/X8OHDtXPnTqvjAMBxocwCaNSCwaAGDRqkmJgYPfvss1bHaRAMw1B6erp8Pp+GDh1qdRwAOC6UWQCN2vPPP6+FCxdqwoQJSk5OtjpOg9GpUyeNGjVK77//vj788EOr4wDAMWMBGIBGa8+ePUpJSVFaWpo+//zzen9Ywa+xegHYz/l8Pp1yyinKy8tTZmamYmJirI4EAAewAAwA7r77blVUVCg9Pb1BFNmGxu12KyMjQ7t27dIjjzxidRwAOCaUWQCN0qeffqq33npLDz/8sLp06WJ1nINq+WlYnevXr59uv/12TZs2Td9++63VcQCg1hgzANDolJaWqlu3boqIiNCKFSvk8XisjnTQCSecoLPPPlsvvfSS1VEOKioqUteuXZWYmKilS5fK7XZbHQkAGDMA0HQ99thj2rp1qzIyMhpUkW2oYmJiNG3aNK1atUqTJk2yOg4A1AplFkCjsmLFCk2aNEkDBw7UgAEDrI5jG1deeaWuvPJKPfbYY9q4caPVcQCgxiizABqNQCCggQMHKikpSc8884zVcWxn6tSpcrlcGjJkSIOb7QWAw6HMAmg0pk+frqVLl2ry5MmKj4+3Oo7ttGnTRk8++aTmzZunN954w+o4AFAjLAAD0Chs375dXbt21YABAzR37twGuxVXQ1wA9nOBQEBnnHGGNm7cqOzsbCUmJlodCUDTxAIwAE3LnXfeqUAgoBkzZjTYImsHTqdTGRkZKigo0P333291HAA4KsosANv74IMP9OGHH2r06NHq0KGD1XFsr2fPnrrvvvv04osv6ssvv7Q6DgAcEWMGAGytqKhIqampSk5O1nfffdfg90ht6GMGB5SXl6t79+5yOp1atWqVvF6v1ZEANC2MGQBoGh566CHt3r1bGRkZDb7I2kl4eLjS09O1fv16jR071uo4AHBYlFkAtrV48WLNmDFDd9xxh/r27Wt1nEbnggsu0E033aRnnnlGa9eutToOAPwqxgwA2JLP59Mpp5yivLw8ZWZmKiYmxupINdK+fXudc845DX7M4IDc3FylpqbqpJNO0oIFC+RwcA8EQL1gzABA4zZx4kStXr1a06ZNs02RPcBOuy0kJyfr2Wef1aJFizR79myr4wDAIbgzC8B2Nm3apO7du+vCCy/UBx98YHWcWmnfvr3OPfdcvfjii1ZHqTHTNHX++edr6dKlysrKUqtWrayOBKDx484sgMbJNE0NGTJELpdLU6dOtTpOk2AYhtLT01VZWam77rrL6jgA8AuUWQC28uabb+qzzz7T2LFj1aZNG6vjNBknnniiRo4cqXfffVcff/yx1XEA4CDGDADYRl5enlJSUtShQwctWrRITqfT6ki1ZscxgwOqqqqUlpamoqIiZWZmKioqyupIABovxgwAND4PPPCA8vLylJGRYcsia3cej0cZGRnavn27Ro4caXUcAJBEmQVgE1999ZXmzJmjYcOGqVevXlbHabJOP/10DRkyRFOmTNHSpUutjgMAjBkAaPgqKyvVq1cvVVZWas2aNYqMjLQ60jGz85jBAYWFhUpNTVXz5s313XffyeVyWR0JQOPDmAGAxuPpp5/WunXrNHPmTFsX2cYiNjZWU6dO1YoVKzR58mSr4wBo4iizABq07OxsPfnkk7ruuut00UUXWR0HP7r66qt1xRVXaNSoUdq8ebPVcQA0YZRZAA2WaZoaPHiwIiIiuAPYwBiGoWnTpsnhcOi2225TLUfWACBkKLMAGqwXX3xR8+fP17hx49S8eXOr44REYyp9bdu21dixY/Wvf/1Lb731ltVxADRRLAAD0CDl5OQoJSVF3bp10/z58+VwNI7fvdu1a6fzzz9fL7zwgtVRQiIQCKh///7aunWrsrKylJCQYHUkAI0DC8AA2NuwYcNUUlKijIyMRlNkGyOn06mMjAzt379fDzzwgNVxADRB/IQA0ODMmzdPr7/+uoYPH67U1FSr4+AoevfurWHDhmnOnDmaP3++1XEANDGMGQBoUMrKytSjRw+5XC6tXLlSXq/X6kgh1djGDA4oLS1Vjx495PF4tHLlSoWFhVkdCYC9MWYAwJ7GjBmjTZs2KT09vdEV2cYsMjJSM2fO1Lp16/TUU09ZHQdAE0KZBdBgrF69WhMmTNDNN9+sc845x+o4qKULL7xQ119/vZ588kllZWVZHQdAE0GZBdAgBINBDRo0SHFxcZowYYLVcXCMJk2apKioKN16660KBoNWxwHQBFBmATQI6enpWrx4sSZOnKjExESr4+AYNWvWTBMmTNCCBQs0Z84cq+MAaAJYAAbAcrt27VJqaqr69OmjefPmyTBqPPdvO411AdjPmaapc889VytWrFBWVpZatGhhdSQA9sMCMAD2MXToUFVVVSk9Pb1RF9mmwjAMpaenq6ysTHfffbfVcQA0cpRZAJb6+OOP9d577+nRRx9V586drY6DEDnppJP0yCOP6K233tLcuXOtjgOgEWPMAIBlSkpK1LVrV8XGxmrZsmVyu91WR6pzbdu21QUXXNCoxwwOqKqqUu/evVVWVqY1a9YoKirK6kgA7IMxAwAN38iRI7Vjxw5lZGQ0iSJ7QFMZpfB4PMrIyNDWrVs1atQoq+MAaKQoswAs8f3332vKlCkaPHiw+vfvb3Uc1JEBAwZo0KBBmjx5spYtW2Z1HACNEGMGAOqd3+9X3759tWfPHmVlZSk2NtbqSPWmbdu2+u1vf9uktq0qKChQamqqWrVqpSVLlsjlclkdCUDDx5gBgIZrypQpWr58uaZMmdKkimxTFRcXp+eee07Lli3T1KlTrY4DoJGhzAKoV1u3btXIkSN12WWX6ZprrrE6DurJH/7wB1166aV65JFHtHXrVqvjAGhEKLMA6o1pmrr99ttlGIamT5/eZBZCQQf/m0vS7bffrlqOuAHAYVFmAdSbd999V5988onGjBmjdu3aWR0H9ax9+/Z64okn9Mknn+idd96xOg6ARoIFYADqBYuAqjXFBWA/5/f7ddppp2nnzp3KyspSfHy81ZEANEwsAAPQsIwYMUI5OTmaPXt2ky2ykFwul2bPnq3c3FwNHz7c6jgAGgHKLIA6t2jRIqWnp+uuu+5SWlqa1XFgsbS0NN1zzz3KyMjQ119/bXUcADbHmAGAOlVVVaW0tDQVFxdr7dq1Tf6Rpk19zOCA0tJSdevWTREREVq+fLnCwsKsjgSgYWHMAEDDMGHCBK1du1bTp09v8kVWEqv4fxQZGakZM2YoKytL48aNszoOABujzAKoMxs2bNDjjz+u3//+97rsssusjtNgsCVZtUsuuUTXXnutnnjiCa1bt87qOABsijILoE6YpqnBgwcrLCxMzz33nNVx0EBNnjxZERERuvXWW7lrDeCYUGYB1IlXX31Vn3/+uZ5++mm1atXK6jhooFq0aKFx48Zp/vz5evHFF62OA8CGWAAGIOT27dunlJQUdenSRV9//bUcDn5vPqBNmza66KKL9Pzzz1sdpcEIBoM6++yztWbNGmVnZ6tZs2ZWRwJgPRaAAbDOfffdp8LCQmVkZFBkcVQOh0OzZs1SSUmJ7rnnHqvjALAZfsoACKkvvvhCL7/8su6//351797d6jiwidTUVD300EN644039K9//cvqOABshDEDACFTUVGhnj17KhgMavXq1QoPD7c6UoPDmMHhVVZWqlevXqqsrNSaNWsUGRlpdSQA1mHMAED9Gzt2rNavX6/09HSKLGotLCxMs2bN0pYtWzR69Gir4wCwCcosgJDIzMzUM888oxtvvFHnn3++1XFgU2eddZb+9re/aeLEiVqxYoXVcQDYAGUWwHELBoMaNGiQoqOjNXHiRKvjwObGjRunxMREDRw4UIFAwOo4ABo4yiyA4/b8889r4cKFmjBhgpKTk62OA5uLj4/Xc889p6VLl2r69OlWxwHQwLEADMBx2bNnj1JSUnTyySfriy++4FGtR9G6dWtdfPHFLAA7CtM0dckll2jBggXKzMxUu3btrI4EoH6xAAxA/bj77rtVXl6u9PR0imwN8fd0dIZhaMaMGTJNU3fccQePugVwWJRZAMfs008/1VtvvaWHH35YJ510ktVx0Mh06NBBo0eP1scff6z333/f6jgAGijGDAAck9LSUnXr1k3h4eFasWKFwsLCrI5kC61bt9Yll1yi2bNnWx3FFvx+v/r06aO9e/cqKytLsbGxVkcCUD8YMwBQtx577DFt3bpVGRkZFFnUGZfLpdmzZ2vv3r0aMWKE1XEANECUWQC1tmLFCk2aNEl/+9vf9Jvf/MbqOGjkTj31VA0dOlQzZ87UokWLrI4DoIFhzABArQQCAfXr10/btm1Tdna24uPjrY5kK4wZHJuSkhJ17dpVMTExWrZsmTwej9WRANQtxgwA1I3p06dr6dKlmjx5MkUW9SYqKkrTp0/X2rVrNX78eKvjAGhAKLMAamz79u16+OGHdeGFF+q6666zOg6amMsvv1x/+MMfNGbMGK1fv97qOAAaCMosgBq78847FQgENHPmTPZKhSWee+45eb1e3Xrrrew9C0ASZRZADX3wwQf68MMP9dhjj6lDhw5Wx0ET1bJlSz3zzDP68ssv9corr1gdB0ADwAIwAEdVVFSkrl27KjExUUuXLpXb7bY6km2xAOz4BYNBnXnmmcrKylJ2draSk5OtjgQg9FgABiB0Hn74Ye3atUuzZ8+myB4nPho/fg6HQ7NmzVJxcbGGDRtmdRwAFqPMAjiiJUuWaPr06br99tvVt29fq+M0CswbH79u3brpwQcf1GuvvaZ58+ZZHQeAhRgzAHBYPp9Pp556qvbv36/MzEzFxMRYHcn2WrVqpcsuu0wZGRlWR7G9iooK9ezZU4FAQKtXr1ZERITVkQCEDmMGAI7fpEmTtGrVKk2dOpUiiwbH6/Vq1qxZ2rRpk8aMGWN1HAAWocwC+FWbN2/WY489pt/97ne66qqrrI4D/KpzzjlHf/nLXzR+/HitWrXK6jgALECZBXAI0zQ1ZMgQOZ1OTZ061eo4wBGNHz9e8fHxGjRokAKBgNVxANQzyiyAQ/z973/Xv//9b40dO1Zt27a1Og5wRImJiZo8ebKWLFmimTNnWh0HQD1jARiAX8jLy1Nqaqrat2+vb775Rk6n0+pIjQoLwOqGaZq66KKL9M033ygzM1Nt2rSxOhKA48MCMADH5sEHH9T+/fuVkZFBkYVtGIahmTNnyu/3684777Q6DoB6RJkFcNCCBQv0/PPPa9iwYerdu7fVcYBa6dixox577DH94x//0AcffGB1HAD1hDEDAJKkyspK9e7dWxUVFVqzZo0iIyOtjtQoMWZQtw7sjbxv3z5lZWWxpRxgX4wZAKidZ555RtnZ2Zo5cyZFFrbldrs1e/Zs7d69Ww899JDVcQDUA8osAK1bt05jx47Vddddp4suusjqOI1aLT8NwzHo27ev7rjjDs2YMUOLFy+2Og6AOkaZBZo40zQ1ePBgRUREaPLkyVbHaRIMo8afnuEYjR07Vq1bt9bAgQPl8/msjgOgDlFmgSbupZde0n//+1+NGzdOzZs3tzoOEBLR0dGaNm2a1qxZo2effdbqOADqEAvAgCYsNzdXKSkp6tq1q+bPny+Hg99v61rLli11xRVXaNasWVZHaRKuueYazZ07V2vWrFGnTp2sjgOg5lgABuDohg0bpuLiYmVkZFBk0ShNmTJFbrdbgwcPZl4ZaKT46QU0UfPmzdNrr72m4cOHKzU11eo4QJ1o3bq1nn76af3nP//Ra6+9ZnUcAHWAMQOgCSovL1ePHj3kdDq1cuVKeb1eqyM1GYwZ1L9gMKgBAwZo/fr1ysrKUlJSktWRABwdYwYADm/MmDHauHGj0tPTKbJo9BwOhzIyMlRQUKD77rvP6jgAQowyCzQxq1ev1vjx43XzzTfrnHPOsToOUC+6d++uBx54QC+//LK++OILq+MACCHGDIA6YJpmg9xLNBgM6owzztCGDRuUnZ2txMREqyM1OYwZWKe8vFw9e/aUJK1atUrh4eEWJwJwBIwZAFbYWVCuCf9ep+Hvr1b6/I3KL62yOtIvpKena/HixZo4cSJFFk1OeHi40tPTtWHDBj3xxBNWxwEQIpRZIERKK/2a/dUmlVb51SrWq+37y/Tyoi0NZjugXbt2acSIETrvvPN04403Wh0HsMR5552nP//5zxo3bpzWrFljdRwAIUCZBUIkt7hSFb6A4iM8MgxDzWO92lNUoeJKv9XRJElDhw5VVVWV0tPTG+QIRFPRUH65acqeffZZxcbGatCgQQoGg1bHAXCcKLNAiER4nAqapgLB6rJS6Q/IYUhel9PiZNLHH3+s9957TyNHjlTnzp2tjtPk8cuEtZKSkjRx4kR98803zC4DjQALwIAQmrt6l77MzpXDMGRKurZPW53SPt7STCUlJeratatiYmK0bNkyeTweS/M0dS1atNCVV16p9PR0q6M0aaZp6oILLtB3332nrKwstWrV6hdfL67wad2eYgWCpjomRyk5OsyipECTVePf+l11mQJoai7p0UqpLWNVVO5TcnSYWsVZv1p65MiR2r59uxYuXEiRBX5kGIbS09PVo0cPDR06VO++++7BrxVV+PTG4m0qqfTJYRhauHG/ruvTtkH8ewZwKMYMgBDrkBSpXm3jGsQPvu+//15TpkzR4MGDdfrpp1sdB2hQOnfurEcffVTvvfeePvroo4N/nrWrSKVVfrWOj1DLuHCFuRxavGm/hUkBHAllFmik/H6/Bg4cqGbNmumpp56yOg7QIN13333q3r27br/9dhUXF0uSfIGgHD+ba3Y5DPkCLBQDGirKLFBPtueV6puN+7Vye74qfIE6v96UKVO0fPlyTZkyRXFxcXV+PcCO3G63Zs+erZ07d+qRRx6RJHVuFq1A0FRBWZVKKvwqKPOpR+tYi5MCOBzKLFAPsncX6eOVu5W1p0gL1u/TB8t3qNJfd4V269atGjlypC699FL9/ve/r7PrAI1Bv379dNttt2nq1Kn69ttv1SLWq2v7tFVCZJgiwpy6rGdLdW1FmQUaKnYzAOrBK4u2KMxl6IecEu3IL1dRuV9Xp7XWNWlt5HCEdpsm0zR1+eWX68svv1RmZqbat28f0vPj+LCbQcNUVFSk1NRUJScn67vvvpPb7bY6EtDU8ThboCHxm6a25pdr+/4yxUW4Fe11afm2fGXvKQr5td5991198sknGjNmDEUWqKGYmBhNmzZNK1eu1OTJk62OA6AWKLNAPejZJlabc0vlcBgqrfAr3O1QUlSYdhVWhPQ6BQUFGjp0qNLS0jR06NCQnhto7K666ir97ne/06hRo7Rp0yar4wCoIcosUA/S2sbrtA4JMgwpKTpMvdvGK2Caio8I7UeZI0aMUE5OjjIyMuRysY00UFvTpk2T0+nUkCFD6vXRw1v3l2rB+lwt35pfp/P0QGNEmQXqgcNh6I992ur0zkmK9rq1v7RSHZIi1aN16HYZWLRokdLT0zV06FCdcsopITsvQqs+CxJqr02bNnryySf12Wef6c033zzisb5AUEu35OmztXuUuavwmP/brtxeoJcWbtGC9bn6aNUu/f3b7WwFBtQCC8CAOrY9r0wFZT7FhrvVMs6r3OJKOQxDydFhcoZo8VdVVZXS0tJUVFSkzMxMRUVFheS8CL3mzZvr6quv1syZM62OgsMIBAI6/fTTtXnzZmVnZyshIeHQY4Km3liyVev2FCvM7VB5VVAXdG2uc1Ka1fp6E/69TpFhTnndTknV7xnXn9ZOnZtFH/f3AtgYj7MFGoKFG/bp32v3yGEYCpqmzkttprO61P6H3dFMmDBBa9eu1UcffUSRBY6T0+nU7NmzlZaWpvvvv19z5sw55JjdheVav7dE7RIjJEn+QFDzf8jVGZ2T5HHV/ENP0zTlCwTldv40cmQYEjdmgZpjzACoIyWVfv0na69axXrVJj5crePC9WV2rgrLfCG9zoYNG/T444/rmmuu0eWXXx7ScwNNVc+ePXXffffphRde0H//+99Dvh4ImjJ+9hPU6TBkmqaCtRw1MAxDae3jtTO/TGWVfu0rrlSEx6VWcd7j/A6ApoMyC9SRyh+f8uVyVv8zczoMGYZCurjDNE0NHjxYYWFhmjJlSsjOC0B69NFH1aFDB916662qqPjlziMtYr1KiAzTnsIKlVT6tSO/XN1axx4cFaiN81Ka6eyUZnK7HGqXGKk/9z9B0V72uQVqijIL1JHYcLcSIj3KKapQIGhqX3GlYsPdiovwhOwar732mj7//HM99dRTatWqVY1f5wsEtWxrvj5ZtUsL1ueqtNIfskxAYxEREaH09HT98MMPevLJJ3/xtTCXUzeffoK6t45VpMelM7sk68rerY/pOi6nQ2d1aaZBZ3bStX3aKjk6LBTxgSaDBWBAHcovrdI/VuzUzvxytYzz6srerZUYFZofVPv27VNqaqo6d+6shQsXyuGo+e+mC9bnalNOqeIi3CqtCijC49QlPVrWatYPx4YFYPZz00036a233tKKFSuU2Kaj9pdUKSrMpbYJ4TKMn9aomKapJZvztHDDPknS6Z2S1K9jwi+OAVBjLAADGoL4SI/+ckaHOjn3/fffr4KCAmVkZNSqyFb5g9q0r1QtYsNkGIbCPU7tLqxQQXmVmkUzp4ema3temTbvK5XX7VD31rGK8FT/iJw4caLmzp2rG2++RVePfF5Op0MB01S/Dgk6v2uLg69fu6tI8zL3qGVsuCTpP1l7FRXmUo82sb96vX0llcreXf0UwJNaxHBHFjhGlFkgRIJBU5m7C7Ujv1yx4W71bhuvcE/t5+dq4ssvv9RLL72k4cOHq0ePHrV6rdNhyGlIAVNyGQf2PTXl5O4RbMw0Te0rqZI/GFRCpEdhrtr929uwt1jvLtshj8shf8DUqu2FuqFfe4V7nEpOTta48eP1t1tuUbev/qELrr5BQdPUt5vz1bNtnCp9Qf13XY6WbslXmNuhdgmGDMNQjNelDbnFv1pmc4sr9c7S7Trwz27VjkL9/tQ2/EIJHAM+UwRCZPHm/fpPVo52FZRr2bZ8fbhiZ51sfF5RUaFbb71VHTt21KOPPlrr1zsdhtLaxWtPYblyiyu1q7BC7RIjFR/CWV6gPgWDpj7L3KsXFm7Wq99s1UsLtyi/tKpW5/hqfa4SIj1qHuNVQqRHW/NKte7/2bvv8CrK7IHj35m5NbnplZAAoRcNEVCKSrHgKpZdcVEEFBUXLCguLmv52RXddVGsiGVFUURlFRUVAZUmSA0JTYq09N5ucvvM74+LEST0QAicz/Pss7u5d2bO3Ic798w773tOQVXd6zcMG0HrtJ589sa/qCgpQlUUFBVyy1xMW7aTgio3KLAht5I9ZbUAuHw64QdZyLUhtwJVUYgPsxEfZkNTFdbnVB77hyDEGUxGZoVoAAHdIGNPOc0j7WiqQiSQW+6isMpNclRIgx5r4sSJbNu2jXnz5mG3249pH52TIogMsVDi9OCwmmgZE4raQA0chDjZdpTUsHZ3OcnRdlRFobjaw4LNhfy1R0q973d5AyzaWkx2WS2xYRYu6pCATzcwqQrbi5zsLHFS7fZjycyjRUwo0aEWQiwmRj80kYdHXM70F59g+MMvYjdplNV4MQyICgm+p9TpYUNuFZqqEhVi5rzUAxsuQHAByr5fOUUBXWrLCnFMZGRWiAajHPL/NoRNmzbx3HPPMWzYMC699NLj2ldSpJ32CWGE2814/fIrKpoup9uHqiqoe5/ZR9jNFDs99b7XMAy+Xp/H5vxKrGaF3HIXs9Zmc3ZSBNuLnPySX42mKESFWLBbNOZtLACC9WDvuOZCrr11LKt//IZfVy9maM8WOOymutqyVpPKWUkRdG8ZxXXdkxnZJ/WAEls1Hj9lNV7axjuodPlYsq2Ybzfkk5ldSavYhr3xFeJMISOzQjSA4KP7SFbuLMNhNeHyBUgIs5EQ3nDz33RdZ/To0YSFhfHCCy8c9/5yK1x8lZmLz2+gqgqXdUmQ9pknwVFWkBFHIMZh3aeTlkpJtYdOzcLrfW+tN8Ce0lqaRwWfasI4nKsAACAASURBVMSFaeRVuEiNDaVnajQFlW5iHVbaxDsItZgorPq9vmyYzcz0lyeyYcm3fPH6U0y86wY6Nwtn+fZScspr9zZOULjpvBa0ig094NgbcitYtKUEFLCZVBQleO1IirATEWJm7Z5yWsc5GqzNtRBnCklmhTgGTo+f8ppgeZ6o0OBc016tY4gMsZBT5iIixERaciRmreEefrzzzjssXbqUd955h/j442uJ6wvozMnMw242Eesw4fYF+G5DIc3OtxNqlcvCiSalmhpWSnQIF3dKYOGWIgwDUqLtXNSp/u+ISQsuzvIHdEyaim4YGAaYTSq9WseyvaiGhHArZk2lqNpdl/T+xmKx8Oabb3LBBRfw6KOP8sILL3DbhalsyK3EG9BpnxBWV81gX2U1Xn78pZj4vfvOq3CxpbCaK9N+rw+dX+HG6fYTESINE4Q4GvKrJcRR2lNay8xVe/AGdAwDBnZOoGfrGBRFoVOz8IOOCB2PgoICJkyYQL9+/bjllluOe38uXwCPX6+reWsza5QZXmo8fklmRZN0bqto0pIj8AcMQizaQW8YrCaNC9rFsnBLEZqqEAgYpLeIIibUgqIoXNwpnoVbijEMg7gwKwO7JB6wj/PPP58xY8bw0ksvMWzYMLp3707vNrGHjK/a7UNRlLob3OhQC25vAK9f31tBQQcMzCaFomo31W4/EXYzsQ1Ul1qI05n8aglxFHTdYNaabEIsGnFWK/6AzvxNhbSJdxzRj05xtYdKl4+oEPNRNU+47777qK2tZerUqQ0yqhdi1rCbNardPsJsZly+AJqq4LDJJUE0XVaTxpHci53bKprEcBulTg9hdjOpMaF136tzWkTRqVk43oCOw2I66MLIZ599ltmzZ3P77bezcuVKTKZDHzg4d9aoS15dvgCdk8IpqvagKsFrS5+2sWzKq2LB5kJURcEwDK44uxlnJ0ce7UchxBlFfrmEOAregE6tN1A3tcCkBee9Od3+wyazK3aU8nVWPooSXMl8Xfdk0o7gR2ru3LnMnDmTxx9/nA4dOjTEaWDSVK7s2ow5mXnkVdRiUlUGnZ1YVyReiNNdSnQIKdH1L7iymTVs5kPXqY2MjOSVV17hr3/9Ky+99BLjx48/5PujQy1c1DE46qsbEG4zMbpfWzz+AE63nzCbmVCrxpSFv5IQbsOsqXj9OnM3FtAuIeyw8QhxJpNfLiGOgtWkEuOwUOr0EOOw4vIGUPaufP6Nxx9gY24V1W4/ydF22sQFVy1/sz6/br6cxxfg84xc2h/mR6qmpoY77riDjh078sADDzTouTSLsHNzn1RqvX7sFu2oi8wLcaYbPHgwV111FY8++iiDBw+mVatWh3x/56QIWsc5cPsCOKwmTL/Nqd/bU6Go2o0CdVMRLCYVwwC3LyDJrBCHIKW5hDgKiqLw1x4phFhM5FW4cHr8DOmeXLdgwxfQmbUmh7kbCli1u4yPVu5h9a4yar1+UH7/kbKaNQK6Qa03cMjjPfHEE+zatYupU6ditR585FfXDTz+Q++rPhaTSmTI0XdLEqIp8/r1vXNUj4+iKLz66qsoisKdd955RJUqbGaNyBDL74nsPiLsZuwWjYraYMOHshovEXYzDpnHLsQhyTdEiKMU67Aypl8barx+bGZtv4oFeRUu9pTWkhITfHzpC+gs3FLMnf3bYDNpVLl8WEwqxdUeHDYTYYeYo7pu3brgSunbbqNv374Hfd+uEiffrC/A7Q/QLMLOoLRmB+06JMSZzBfQmZ2Ry+rd5SjAJZ0TuLhj/HHNQ2/RogXPPPMM48aN45NPPuG8iwaxq6yWUIvGWc0j6p26o+tGvXNxrSaNIT1S+GJdHrkVLuIcFq5Jb15v4iuE+J1ylDUPpUCiEIewo9jJp6uzSdrb9Us3DHYX1zC6XxtKajw88eVGdpXWEmLROL9tLHcNaEtS5IFlfAKBAL1792b37t1s3ryZ6Oj6uwhV1vqYtmwnEXYzIRYTRdVu4hxWhpybwtLtJSzbXoqqQL8OcZyXGnNCz10cmfj4eK677jpef/31xg7ljDN/UwHfbSwkJcqOrhvkVri4qU+rI5q7fiiBQIBevXqxY9du7nj1C+JiYjAIdgW7/tyUuikCWTkVfLehAG9A5+zkSP7UJRGLqf5E9bfSYb+pLwHWdYOffi1h1c4yVFWhX7s4zmkZdVznIsQp5IjvMuV2T4gG1CzCTpjNTFGVG6fHz4pfSylyepixcjfPz/0Fp9tPp2ZhNI+0kVfh4uOVe+p9NPn666+zatUqJk+efNBEFqC81otuUDf6Ex9mI6/SzaqdpczfVEhEiJlQm4k5WflsypO+7+LMtq3ISXSIGVVRMGkqdovGzpKa496vpmm88toUysvKmPnac6zdU0GVy0ep00NOeS0A2WW1zM7IJcxmIjHCRsaechZuKTroPn9LZL1+nbkb8nlh/lZe/n7bft/jtXvKWby1mMhQCw6biW825LO9sPq4z0eIpkaSWSGOU6XLx4bcSn4pqEJV4caeLWgX78DnD2Axq/RuHUO43UJ5rRdPQCfUaiIixILXb1Di9OL5QyvZnJwcHnroIS677DJuuOGGQx47xKJhGAYBPZgQB+vEavxaUkuE3YxZU7GaNEKtJrYXOU/YZyBEUxDrsOLcZ566x6cTHWo5xBZHrsqRTPuLr+fXJV9SsyuL7UVOymuCN5sAeZUuVFXBatZQFYX4MCtbD5N4+gM6i7YUsS67koQIKw6rxpeZ+eRWuIBgch4ZYqn7ntstJnaV1TbI+QjRlEgyK8RxKKpy8+aiHXy2NoePV2bz/rJd2MwaV6c357IuzWgVE4LZpKKpEGoxUesNUOr0UO3y4/L5iXFYsJmDCWmNx4/LG2Ds2LEEAgGmTJly2Ll88eE2erWOIbfCxbrscn7cUkRxlYetBVVUurx17/P4AoTbZR6tOLMN7JxAlN1MToWLnHIXreNDOS/14E8+jkZ2WS3X3HoPjthmfP/209TWuvAbRt00olCLiUDg96cwNR7/flVQ9mUYBst3lDB5wTbeXbaTkmo3hhFcOKqpUFAZbLEbYTfj9v2enHv9AVksJs5I8q9eiOPww5YiDAyS986RzS6vZX1uJee2iiYyxIyuK/gCOiEWE2ZNRdcNfi1yoqPQNi6UYT1b4PXrfL+5kB0lTtYtmcfs2bN57rnnSE1NrfeY1W4fOeW1qIpCclQI56ZGsyG3khU7S1EVhT1ltaTGhbKt0ImiKKgoxIZZ6dGqYX60xfE5ynUKogFFhlgYe3E7cspdaKpCSpS9wRZXJYTbKIkI57p7Hmfao6PZ+cMM7p80sS657JAYRrsEB78W16AQrGpwaeeEeve1vcjJoi3FJEXaSQi3sbuslnC7mTbxDgJ6sMMZQJ82MewscZJbXothQEKEja7SYEGcgSSZFeI4ON1+7HsXd/gCOiXVHn7aXky41UT7xLBga8ytRcHSWb4AKdEh6IaBqkBihA3F72PxnNWsL/WS2DKWz157mqTWHRg0dFS9x6uo9TI7Iw+3349hQJjNRMfEcLLLa4kOtRBuN1Pj9lNe46VrSgQ9U2OICDHTKiZU6lSeQhqii5s4NjazRtt4R4Pvt3+HeIqq3Bg9+pLWbxBZX79H+FP3QkY2uFyYzzqL689twZ6yWvwBncQI296uYAfKq3BhM2mYVJWOieGUOr38WuzEatJoE+eg3d74I0MsjOyTSl6FC0UJNoKQMnviTCTJrBDHoVOzMOZtKkRTFTKzKyisdpMcZWfO+nwudPs4LzWGDolhVNR6WbWrjNSI4EiQgcHujC18+dq/WJbUGa/JzEc/z6K8qJAJT7zKluJabDYr8eHW/cpsZWZXEDAMkiJDMAyDgkoXmwuqsJg0DCO4utliUnG6A1hMGmcn118aSAjRsBxWEyN6t6KsxsvAN16mX/c0ru99IZ9ExtOpugC8Xopvu4PVw++mNqCQ1jyC9BaR9d7YRIRY6ubSh9nMdEkKJyHcxoCO8TSP3H80OdRqol1C2Ek7TyFORTJnVojj0Kt1LP3axZNf6aLS5aN/h3haxzlIirSxYkcZum7UFUmPCrHg9PjxBXSc69YT2LmTrY4Ekktzqc7dxrqdGXRv0YXKXytZtaucLzNzeX/Zrrr5cQBuv45JVdhSUMU36/P5aXsphZUuNAWSIu1UuHzkVbiwWhR6tY6RRFaIk8isqUTYzWQuyOTylK5scJbzf/Zo1oQmUoaZ9zeVk/32B1S7fXyZlceqXWX17qdLUjit40LJKa8lr6KWuDAbg7sn0zImVGrOClEP+aUT4jhoqsJFneJpG+/gs7U5NN+72COgG+wsqWHmqj0kRdjp1SaGvu1iWbGzDL/XhzkzixZeF9GuKqKrS5iyfSUh9jCan3st/Lqdrpf3QgsLoaLWy49bChl6XksA2sY5WLK1mN1ltUTazfg0gxKnjwvbxrK9xIlh2GnVNpZLOyfUzeMVQpw8uWU1lHw7nz9bHWwIjWLujlWckz6IKwzw6ZCwPgP+dDGmmATW7C6vt/6zWVO5tlsyhVVuAnu7+725eAfltV7aJ4RxbbdkWeglxD7k2yBEA0iIsBLtsFBQ6cZu0Vj+aylWk0JZjZedJbXkVrq4pmtzwkMs7PlpLTH5G2mRv4t57Xox5dfVlFSXcE6zDvTP24LHbOLp0X+F8HD0vWW3pkbaGTlyJCNHjiQMF9//5040JVjmB+Abi8bD99/LPUOGkJOTw/C/XHFAjOPHj+eqq65iy5YtjB49+oDX/+///o9LLrmEdevWMW7cuANenzhxIn369GHZsmU89NBDB7w+efJk0tPTWbBgAU8//fQBr0+dOpUOHTrw1VdfMWnSpANenz59OikpKXz88cdMmTLlgNdnzZpFbGws06ZNY9q0aQe8/s033xASEsLrr7/OJ598csDrCxcuBOA///kPc+bM2e81u93Ot99+C8BTTz3F999/v9/rMTEx/O9//wPgwQcfZPny5fu9npyczAcffADAuHHjWLdu3X6vt2/fnjfffBOA6upqZs+ezcaNG+teT09PZ/LkyQAMHz6cnJyc/bbv3bs3zz77LACDBw+mtLR0v9cvvvhiHnnkEQAuv/xyXC7Xfq9feeWV3H///QD079//gM9myJAh3HnnndTW1nLFFQf+2/nt315JSQnXXXfdAa/fcccdXH/99WRnZzNixIgDXj+T/u299/Z/KdmZi9XnwaMHqA34eWnj97Rp15utMSl4Ky20yFyPv3/cIeexa6pCUqSdSpePF+fvxGJSiQ+z8Ut+NR+v2sNtF7Q+6LZCnGnkeYUQDcBq0hjcLZmuKRE4rME2teemRhNuN5MSbWd3SQ0uX4DLz2rGrXE+WlYVURAWQ2RNBbu9wbqQ+WU59NnwPQYKAd3AALwBvW7l8m/aJTiwmzUcNhNmTcEwDLS9nYFkYZEQjcuqgEkP4FZNlPg9AFR5XayKiMenmVnbrANLvCGU1/ro1z6ubjt/QMftCxxQ7aKg0o03oBNhN6OpCs2j7GwrdOL9Q31qIc5k0s5WiAZW5fbx6g/bSYq0oSrBZDO3ws3ovq2JDrXw1aJNbH7qBRw1VTitITSvKCB/02Ie97uxAxOjEuDN2bgiY+jULIx+HeL2W6Fc7fbx0co9lNf4AIMYh5Ube7aQ+bFNRFxcHEOGDOG1115r7FDEieB2szihGcNcbnJ9boY7YmidfjmtasrxaWbyYppRcMkgRl/fh/SUYOvZTXlVzN9cQCBg0DzKzpVpSYTunUawp7SW1xduJznKjqIouH0Bqlw+Hr+6i9y8itOdtLMVorGE28ykJUeQU+aixOkhu8xFx8QwokMtVLn9bHFrJKcmERVwk1xZSH5EPKNMZtYAKYrC6PJCshZ+wO19mjOwS+IBpXbCbGZu6t2Kwd2TGdw9heG9WkoiK8QpQNd1/vPqq1zirMLwe/gBeN1bi0ULfj+tRoBUXKR0akVSRHB+fVG1m2/X5xMdYqF5lJ2CSjfzNxXW7TMl2k6PVlFkl9WSU15LqdPDX7unSCIrxD7kF1CIE+Dys5rRPMJOfpWb+DArXVP+UILn5pvgDRds3QqqhmHS6BgSws/p6TyYns6Lr73GokWLmDlzJm3ad+THX4rYU1ZLQriVizolEG4zn5BamUKIY5Ofn8/NN9/M/Pnz+cuf/8xbdjsxn38Ohk6X4p1kJXci3Gai5sYRtIoNI8ZhBaCsxouigMUUHFuKC7OyZ5+WtIqiMLhbMukpkTg9ARLDbSRG2BrlHIU4VUkyK8QJoKkK57SM4pw//D3cZqJDYjibC6pwjBpDTU4+bXdtJvKyjjDwUqzdu/MCMPCqq7j55pvp0aMHN4x9mNQL/0KMw8Lm/GoKqzzccn5q3Y+fEKJxzZkzh1tuuYWamhqmTp3K7bffHrx53bkTZs9mUK2LxE7nkduyA3HhNs5Lja6b5x5qMRHQjb3NVBSq3D6iQ/dvc6soCm3jpZasEAcjc2aFOMl8AZ2MPeUUVLqJD7fSrUV0vYlpYWEhw0bcxPfz53HOhQO55YFncUREkVfh4tYLUmm29zGlaFpkzuzpw+12849//INXX32Vrl278tFHH9GpU6f93lNW42XptmKqPX46JITRrUUUqvr7UxrDMFi0tZg1u8tRFQWbWeW67inEhVlP9ukIcao54rk0MjIrxElm1tR6a0tC8IctY08FGdnlaIrCv9/8iIeffo75703msZGDGPXIJMJS0+tGdQ6lxuPH69cJs5mk0Pop5CgHEMQpasOGDQwdOpQNGzZw77hx/Ou557Ba909Aq90+3lu+C68vgN2s8XWRE5cvwIXtfq9ioCgK/TvE0yUpAm9AJzrEgt1yclrSOj1+AgGDMJtpvwRbiKZGklkhTjCXN8CyX0soqHKTFGGnd5uYg9aX3JRXxeJtxSSG29ANgyXbSxg5+m5adDmXzyZN4Pl7hzP4lruJHPifQx5z5c5Slm4vASAqxMK15yQTEVJ/H3hx8sninabLMAymTJnC+PHjsdgd3P2vd0g/fwClLp2kPwymZpe5qHH7SY4KPkWxmTVW7CjbL5n9zckciTUMgx9+KWL5jmC94pbRIVzXPeWkJdFCNDQZrhHiBAroBl+syyUrpwKPL0BGdgVfZeah6/WPzm0vdhJpN2MxqZhUlbwKF+v2VHBWWjqvfzqPv1w/jP/99xX69evHjh076t1HXoWLhVuLiQ+zkhRhp8bj57tNBSfyNIU4I5SUlHDNNddw11130eGcXjw9/RsuGXgZVrPKNxvycXkD+71fVWHfgXjdMDBpR3cj4/T4Kapy4/YFDv/mI7S10MmSbSUkhttoHmlnd2ktP/xSePgNhThFSTIrxAlU6fKRV+kiKdJOqNVE80gb2WW1VLv99b4/1GrCvbcY+qb8SnaV1hBi0dBUhSK3wvvT3uXjjz9m8+bNpKenM2PGjHqPqSkKJjX49Y4KCXYmE0IcuwULFpCWlsZ3333Hvye9wOhn3qJF8yQAQiwmAgGDardvv21axYQSH24lp8JFcbWHwmrPfo0SDmdjbiWv/rCNd5bu5LUft5O9T5WD41FU7cZiUuqmK0WFmhts30I0BklmhTiBNEXBMIIjMrD3vxUF9SDfvB4to1AV2Flcwy/51SSG22gZE0p0qAWPL0BRlZshQ4aQmZnJ2WefzbBhw7j55puprq6u20e43YxuGPj1YFJcVuOVUj5CHCOv18uECRO49NJLiYyMZOXKldx3771YzVrdSKwvoGPAAY/pbWaNEb1bMqBDPGkpkQw7rwXntIg6ouNWunx8mZlHdKiFpEg7NpPGrLU5+APH3/krJtSK12/Uzd+ucvllQalo0iSZFeIEiggxc3ZyBNllLgqr3OSUueiaHEGYrf75q7tLayhzeil2ulEUaJ8YVlfpIGAYmPcu5GrZsiWLFi3i0Ucf5YMPPqBbt26sWrUKgOaRdvq2j6OoykNehQuH1cTAzgkn54SFOI1s3bqVPn368PzzzzNmzBhWr15N165dMWkql3aOp9rtJ7/STYnTS7/2sfV+r0MsJs5vG8tlXRJpm3Dk5bV+G+X9rWmKw2bC5Q3gaoDpBh0Tw+jeMorcCje55S5iHBYu6hR/3PsVorHIAjAhGlBAN/D4gyuXf1vkc0nHBFpEhVBW4yXGYaHdQepFFlS6+W5jIYkRdlrEhKICGbsr6JQUjl83aB/vICny99GT/CovQ+8YT48+fbnr9lvo06cPzzzzDPfffz89U2PokhSBxxcg3G6uS4KFEIdnGAbvvvsuY8eOxWaz8fnnn/PnP/95v/ekRIdyY88WVLv9hFg1wvdJZHcUO9lZUoPDaiItObLehVVuX4DP1+awdHsJIRaNv5zTnD5tf5+CEGE3oyjg2lsJocrlI9SiNUi3P1VVuDKtGX3axBDQDaJCLXKNEE2aJLNCNJBfi6qZtTYXty9ArMPC9ee2INZhRVUVOjYLP+z2ZTVeFH7vBNQxKQJ7aQ0XdYwn1GqidWxo3Ry37zcXsmJHKYqqgJHEJ3OX8J9Hx/PPf/6T+fPn8/7779OsWTMcVvmKC3E0ysvLGTNmDJ988gkDBgxg+vTpNG/evN73hlpNhP7hO5aZXcEX63KxmTW8AZ2s3EpG9Gq5XwWTgG7w/vJdfJWZT5hNo7ja4KUftmMza3RrGQ0E21Zfe04yX6zLpazGS6hF4689Uo6oLN+RUBSlrguZEE2d3IoJ0QAqXT5mrsrGZlJpHmnH6fbz8ao9R1VT1GE1oRtG3fzaKpefNnEOzmkRRfuEsLpasUVVblbsLKN5lJ3kSDtxDgtLs93M/PgT3nrrLX766SfS0tKYM2fOCTlXIU5XS5YsIT09nc8++4xnn32W+fPnHzSRPZgftxSREG4jIdxGSlQIhVXu/drTAlS5fGTmVBBuMxFptxDrsBII6CzbWyrrN+0Twxh7cTvu6NeGO/q33e/JjBDid5LMCtEAymu8BAyjbpQmxmGlxOml1nvk89tSou30TI0hr8JFXoULTYWBXRIPeJ/bp6MpoO6dxmA1a/gDOr6AwahRo1izZg3Nmzfnqquu4p577sHtlkoGQhyK3+/nscceo3///pjNZr5fuJi7xo1HUQ7/E1lU5ebb9fnMycojp7wWf0BHUxVKnB5W7ixjY24l24uq99tGUcCsKgT2lugzCI7W2uupP20za0SFWqR9tRCHIM8ghWgAoVYTXp9OpcuLw2rG4w9gM6kHbY5QH0VR6N8xnrOTI/D4daJDLfVuH+OwYDapVLp8hNlMbC9y4nT7+WJdLuekRNKpUyd+/vlnHnjgAV566SUWLVrERx99ROfOnRvylIVocrx+nbW7y8mpcBEVYua81GhK8nMYNmwYy5cv5+abb+am8Y+zttDL2qU7aR5p58q0pIM2EyiscvPaj9vx+XVUReGn7aV0axHBih1l7ChxoqKgagpLtpXQNs5B+8TgdKMIu5m+7eP58Ofd5Fa4COgG8WFWLqvn5lUIcXhyqydEA8irqKXK5WPhL8V8t7GAgioPg7snH9P8thiHNViK5yCJcKjVxI3ntcRq0thW6CS73EVydAhltV4+X5fLtsJqbDYbkydP5uuvvyY/P58ePXowdepUaaUqzmhLthWzPq8SBcgpd/F/k6aSnp7Oxo0bmTFjBk9Meo2MPA8J4TaSIu3kVbhYsq34oPtbsaMUf0AnKdJOYoQNi6bg9uk0j7ITYjGTHB3ChW3jiA61si6nsm47RVG4Jr05E/7UkcvPSuSGc1OY+JezSY4KOQmfghCnHxmZFeI4ldV4+WZ9AWkpkXRsFk6x002Y1UybOMcJO2ZihI3b+7bmh82FZOZUEB8erCNrGAZZORW021sC6IorriArK4ubbrqJMWPGMG/ePN566y2io6NPWGzi0OSGonF4/AF2FNfQLMKGq7aG9597mB+++pRze/bik5kf0apVKzL2lGPS9m0mYCG33HXQfQb036f7QPB/6wZ0SYqgxhuoq93q9Lqx/KFagKYq9GwdQ8/WMSfgbIU4s8jIrBDHqdLlQ1GCVQgcNhOpsQ48fh2P//iLmx+O2aTi36c1bkA30P7QkSExMZG5c+fy/PPP89VXX9G1a1cWLVp0wmMTB6coDbMiXRw5TVFQVYXNWWu59/qBLPz6f1w5cixfzl1Aq1atgGDDEV9g30WYPuLDD77iv1vLSHwBg9IaL+W1XpwePz1To+nWMgqLppJbHpz/jgG9JGkV4oSRZFaI4xRuM2EYwfl4EExuI+xmrCdhwcZZSRFYTRp5FW4KKt34AgY9Wx846qqqKvfffz/Lly/HbrczYMAAHnnkEfz++tvqCnG6UTDI+vpdHrjlL3i8Xv4++UPum/AwCRG/P9pPjQnlnBaR5O9dhBlmM9P3EO1nW8aEMrpfa1rFhNI8ys6tF7SiY7NwYh1WRl3Ymv4dYunbPpbbLkyVLnxCnEDKUT7ykudjQtQjM7ucuRsKMAh2/Ln+3BQSwk/Oj1dFrZfN+dUEdJ32iWHEhx36uE6nk3vuuYd3332X3r178+GHH5KamnpSYhUQExPDjTfeyCuvvNLYoZwxcnJyuOmmm/jxxx8564I/MeC2h7igS0v+ck4y5npuOstrvPh0nagQaSYgRCM64kdYkswK0UBqPH5cvgDhNnOTKKMzc+ZMRo8eDcAbb7zB0KFDGzmiM4MksyfX559/zqhRo3B7PAwY+U/Ov2IwFpNGUbWHq9OSOL9dbGOHKISo3xEns6f+L64Qjcgf0Fm5o5TZGTks/7UEX+Dg82BDrSZiHdYmkcgC3HDDDaxbt44uXbpw4403csstt+B0Ohs7LCEaRG1tLWPGjOHaa68lNTWVKZ/O45xL/kxEiAW7RSPGYSEju7yxwxRCNICm8asrRCOZnZHL5+vy2JBbxVeZefxvTc5ptRo9NTWVxYsX88gjj/D+++/TrVs3Vq9e3dhhCXFc1q1bQAc5hwAAIABJREFUR/fu3Zk6dSoTJkxg2bJltGvfYb/Fkl6/ftD6sUKIpkWSWSH+oNrtI7/Sxe7SGjJzKmgRbSc2zEpKdAgbcisprfE2dogNymQy8eSTT/Ljjz/icrno06cPzz//PLp+4qsxCNGQdF1n8uTJ9OzZk8rKSubPn8+//vUvLBYLackRxDmsZJfWklPmwufXGdhZmhQIcTqQOrNC7CO7tJZF24pRgGqPj7IaX10/dEVRUBSlrmzP6aZv375kZmZy++23M2HCBObPn897771Hs2bNGjs0IQ6rsLCQkSNHMnfuXK6++mreeecdYmN/nw8bajUxpn8bNudX4/PrtI4PPexiyYaUU16L0+MnJtRKhN1MYZUbRYHEcBsmWWQmxHGRZFaIvfwBnZ9+LSEqxIzVpBGtW1ifU8nO4hpiwqxUuXy0iXMQG3rwupNNXXR0NLNmzeKtt95i3LhxdO3alWnTpnHFFVc0dmhCHNS3337LyJEjqaqq4vXXX2fMmDH11vINsZjo3jLqpMf3w+YiFm8rRlXAFzDQFFBUBcMwaB3n4PpzU7CaZMqDEMdKbgeF2MsXMPDrRt2PillVObdVNL1axxAfZqVf+zhu7NkC9Rha1DYliqLwt7/9jdWrV9OsWTMGDRrEuHHjcLvdjR2aEPtxu92MGzeOK664goSEBFavXs0dd9xxSjWlKK72sGR7MUmRdppHhVDp8rJmTzmJ4TaSo0L4tdjJ2t2yEE2I4yHJrBB7WU0qkSFmymuDc2KdHj8hFhNXpDXjlvNTGdglEZv5zBk96dy5MytWrOCee+7hpZdeolevXmzevLmxwxICgE2bNtGrVy9eeuklxo4dy8qVK+nSpUtjh3UAty+AqlDXItcbMNBUhcDexWg2k0bZaTYPX4iTTZJZIfZSVYV+7eNwWE0UVLkxMLi4U/wZlcD+kc1m46WXXuKrr74iNzeX7t2789Zbb51WFR1ONvnsjo9hGEydOpUePXqQm5vLnDlzePnll7HZTs0OWzEOC1aTRqXLh2EYqASTWZMabD/t8gZIiQo5/I6EEAclTROEqIc/oMuijD/Iz8/npptuYsGCBQwePJg333yT6OgDW+eKQ4uOjmb48OG8/PLLjR1Kk1NaWsqoUaOYPXs2AwcOZNq0aU1igWJehYvP1uZQVuOleaQdm0Vje6ETFDi/TSwXd4o/paZGCHGKOOIvhSwAE6IeksgeqFmzZnz33XdMmjSJhx56iBUrVvDhhx/St2/fxg5NnAF++OEHRowYQXFxMZMmTWLcuHGoatP4niZF2rn7onboulE3597tC6AoyMIvIRpA07gSCCFOCaqq8o9//IPly5djs9kYMGAAjz76KH6/v7FDE6cpn8/Hgw8+yCWXXEJYWBgrVqzg73//e5NJZPe17+JRm1mTRFaIBtL0rgZCiEbXo0cP1q5dy4gRI3jqqafo168fu3btauywxGlm+/btnH/++Tz33HOMGjWKNWvWcM455zR2WEKIU4wks0KIYxIWFsa0adOYMWMGGzZsID09nY8//rixwxKnAcMweO+99zjnnHPYvn07s2bN4s033yQ0NLSxQxNCnIIkmRVCHJehQ4eybt06OnXqxA033MCtt96K0+ls7LBEE1VZWcmNN97IyJEj6d69O5mZmQwePLixwxJCnMIkmRVCHLfU1FQWL17Mww8/zLRp0+jevTtr165t7LBEE7Ns2TLS09P59NNPefrpp/n+++9JSUlp7LCEEKc4SWaFEA3CbDbz9NNP88MPP1BTU0OvXr2YNGkSuq43dmjiFOf3+3nyySfp27cviqKwdOlSHn74YTRNFkgJIQ5PklkhRIPq378/mZmZDBo0iPvvv5/LL7+cgoKCxg5LnKL27NnDgAEDeOyxx+qmrPTq1auxwxJCNCGSzAohGlxMTAyfffYZU6ZMYfHixXTt2pVvv/22scMSp5hPPvmEtLQ0MjMzmT59OtOnTyc8PLyxwxJCNDGSzAohTghFURgzZgyrV68mISGBK664gvvuuw+Px9PYoYlG5nQ6ue2227j++uvp2LEj69atY/jw4Y0dlhCiiZJkVghxQnXp0oWVK1dy9913M3nyZHr16sUvv/zS2GE1mqNsIX7aWbNmDd26dePdd9/l4YcfZsmSJbRu3bqxwxJCNGGSzAohTjibzcYrr7zCl19+SXZ2Nt27d+ftt98+YxM7RTniluOnDV3Xef755+nduzcul4sff/yRp59+GrPZ3NihCSGaOElmhRAnzVVXXUVWVha9e/fm9ttvZ8iQIZSXlzd2WOIEy8vLY+DAgUyYMIGrrrqKzMxM+vXr19hhCSFOE5LMCiFOqqSkJObNm8dzzz3H7NmzSU9PZ+nSpY0dljhBvvzyS9LS0li+fDlvvfUWs2bNIjo6urHDEkKcRiSZFUKcdKqq8s9//pOffvoJs9lMv379ePzxx/H7/Y0d2kmzs6SGd3/ayYwVeyir8TZ2OA3O5XJx1113cc0115CSksKaNWsYNWrUGTnFQghxYilHOWftzJzgJoQ4Yaqrq7nrrruYPn06559/Ph9++CEtW7Zs7LBOmKioKC7/y/X8kjoYrz+AoihEhpj5/M7ziXVYGzu8BrF+/XqGDh3Kxo0bGT9+PM888wxW6+lxbkKIk+aI73xlZFYI0ajCwsJ4//33+eCDD8jKyqJr1658+umnjR3WCbV6dxluXwCTpqKpCmVOL+8v29XYYR03wzB49dVXOffccykpKWHu3Ln85z//kURWCHFCSTIrhDglDBs2jIyMDDp06MCQIUMYNWoUNTU1jR3WCeHx6ajq74MOOlBW27SnGhQXF3PVVVcxduxYLr74YrKysrjssssaOywhxBlAklkhxCmjTZs2LF26lAcffJD//ve/dO/enYyMjMYOq8G1iAlBBXTdwB8wsGgqF3dKaOywjtm8efNIS0tjwYIFvPzyy8yZM4f4+PjGDksIcYaQZFYIcUoxm81MnDiRBQsWUF1dTa9evXjxxRfRdb2xQ2sw6SmRXNIpgRpvgBqPH0M3MKlNb2GUx+Ph/vvv57LLLiM6OpqVK1cyduxYWeQlhDipJJkVQpySLrroIjIzM/nTn/7E3//+dwYNGkRhYWFjh9UgFCArpxKHVSMuzIqmKfz940zyK12NHdoR27JlC71792bSpEnceeedrF69mrS0tMYOSwhxBpJkVghxyoqNjWX27Nm89tprLFy4kLS0NL777rvGDuu4uX06ZbVerCYNALOmoiiwtdDZyJEdnmEYvP3223Tr1o09e/bwxRdf8Nprr2G32xs7NCHEGUqSWSHEKU1RFO68805WrVpFXFwcf/rTnxg/fjwej6exQzsmhmFgNqkogF8PVjvUDYOAbhB3ipfmKisr469//Su33347vXv3Jisri6uvvrqxwxJCnOEkmRVCNAlnnXUWq1at4s477+SFF16gd+/ebNmypbHDOiZmTeXRKzujEExuDQOu7ZZM56Twxg7toBYtWkTXrl354osv+Pe//828efNISkpq7LCEEAJTYwcghBBHym6389prrzFw4EBuvfVWunXrxssvv8ytt97a5BYdXXNOc85KjmBbYTWJEXbSUyIbZL9FVW62FjpJirTROs5x3Pvz+Xw8+eSTPPPMM7Rp04bly5fTo0ePBohUCCEahiSzQogm55prriErK4sRI0YwatQo5s2bx9SpU4mMbJiE8GRpE+egTQMknL/5fnMhd8/IwKQp+Pw6f+vbmr8P7HDM+9uxYwfDhg3j559/5pZbbuHll1/G4Wi4eIUQoiHINAMhRJPUvHlz5s+fz8SJE/nf//5H165d+emnnxo7rEbj9evcPSMDly9AtduP26/z5pIdbMqrOqb9ffjhh6Snp7N582ZmzpzJf//7X0lkhRCnJElmhRBNlqZpPPjgg/z000+YTCb69u3LE088gd/vb+zQ+CYrn1unrWLMB2tYtavshB+votaLbhj7/c2kquwpO7oualVVVYwYMYLhw4eTlpZGZmYm119/fUOGKoQQDUqSWSFEk9ezZ08yMjK48cYbefzxxxkwYAB79uxptHjmZObxxFcb2ZRXRcaecu75KIOsnIoTeszoUAs2s7bf3/y6TruEsCPex88//0x6ejozZszgiSeeYOHChbRs2bKhQxVCiAYlyawQ4rQQHh7O9OnTef/991m3bh1du3Zl1qxZjRLL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\n",
      "text/plain": [
       "<Figure size 864x864 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "\n",
    "np.random.seed(1)\n",
    "\n",
    "centers = np.array([\n",
    "    [np.sqrt(8 / 9), 0, -1 / 3],\n",
    "    [-np.sqrt(2 / 9), np.sqrt(2 / 3), -1 / 3],\n",
    "    [-np.sqrt(2 / 9), -np.sqrt(2 / 3), -1 / 3],\n",
    "    [0, 0, 1],\n",
    "])\n",
    "\n",
    "coords = np.vstack((np.random.normal(c, 0.1, (40, 3)) for c in centers))\n",
    "\n",
    "fig = plt.figure(figsize=(12, 12))\n",
    "ax = fig.add_subplot(111, projection='3d')\n",
    "\n",
    "ax.scatter(coords[:, 0], coords[:, 1], coords[:, 2])\n",
    "ax.scatter(centers[:, 0], centers[:, 1], centers[:, 2], c=\"r\", alpha=1, s=60)\n",
    "ax.plot(centers[[0, 1], 0], centers[[0, 1], 1], centers[[0, 1], 2], \"k\", linestyle=\"solid\")\n",
    "ax.plot(centers[[0, 2], 0], centers[[0, 2], 1], centers[[0, 2], 2], \"k\", linestyle=\"solid\")\n",
    "ax.plot(centers[[0, 3], 0], centers[[0, 3], 1], centers[[0, 3], 2], \"k\", linestyle=\"solid\")\n",
    "ax.plot(centers[[1, 2], 0], centers[[1, 2], 1], centers[[1, 2], 2], \"k\", linestyle=\"dashed\")\n",
    "ax.plot(centers[[1, 3], 0], centers[[1, 3], 1], centers[[1, 3], 2], \"k\", linestyle=\"solid\")\n",
    "ax.plot(centers[[2, 3], 0], centers[[2, 3], 1], centers[[2, 3], 2], \"k\", linestyle=\"solid\")\n",
    "\n",
    "ax.set_xticks([]), ax.set_yticks([]), ax.axis('off')\n",
    "\n",
    "ax.view_init(20, 0)\n",
    "\n",
    "plt.savefig(\"tetrahedron.png\", dpi=80, rasterize=True, transparent=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "_, ax = plt.subplots(figsize=(8, 8))\n",
    "ax.scatter(coords[:, 0], coords[:, 1], s=10)\n",
    "\n",
    "ax.set_xticks([]), ax.set_yticks([]), ax.axis('off')\n",
    "\n",
    "plt.savefig(\"tetrahedron_2d.png\", dpi=80, rasterize=True, transparent=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from openTSNE import TSNE\n",
    "\n",
    "embedding = TSNE(neighbors=\"exact\", negative_gradient_method=\"bh\").fit(coords)\n",
    "\n",
    "_, ax = plt.subplots(figsize=(8, 8))\n",
    "ax.scatter(embedding[:, 0], embedding[:, 1], s=10)\n",
    "\n",
    "ax.set_xticks([]), ax.set_yticks([]), ax.axis('off')\n",
    "\n",
    "plt.savefig(\"tetrahedron_tsne.png\", dpi=80, rasterize=True, transparent=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
